// 用户表模型
const { DataTypes } = require('sequelize');
const bcrypt = require('bcryptjs');
const sequelize = require('../config/db'); // 导入 sequelize 实例

// 定义模型
const User = sequelize.define('User', {
  // 定义属性
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  username: {
    type: DataTypes.STRING(50),
    unique: true,
    allowNull: false
  },
  password: {
    type: DataTypes.STRING(100),
    allowNull: false
  },
  createTime: {
    type: DataTypes.DATE,   // 自动设置时间
    field: 'createTime',    // 映射数据库字段
    defaultValue: DataTypes.NOW   // 自动设置时间
  },
  updateTime: {
    type: DataTypes.DATE,  // 自动设置时间
    field: 'updateTime',   // 映射数据库字段
    defaultValue: DataTypes.NOW   // 自动设置时间
  },
  name: DataTypes.STRING,
  phone: DataTypes.STRING,
  roleName: DataTypes.STRING,
  avatar: DataTypes.STRING
}, {
  sequelize,  // 通过 sequelize 实例访问数据库
  tableName: 'users',  // 显式指定表名
  timestamps: false,   // 禁用自动时间戳
  hooks: {
    beforeUpdate: (user) => {
      user.updateTime = new Date(); // 更新时自动设置时间
    }
  }
});

// 添加用户前加密密码
User.addHook('beforeCreate', async (user) => {
  user.password = await bcrypt.hash(user.password, 10);
});

// 添加或更新用户前加密密码
User.addHook('beforeUpdate', async (user) => {
  if (user.changed('password')) {
    user.password = await bcrypt.hash(user.password, 10);
  }
});

module.exports = User;